package server.organizacion;

import persistencia.Persistencia;
import persistencia.dominio.Favorito;
import persistencia.dominio.Organizacion;
import java.util.*;

import comun.constantes.*;
import server.aula.ControlAula;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author unascribed
 * @version 1.0
 */

public class ControlOrganizacion extends ControlAula{

  public ControlOrganizacion(Persistencia persistencia) {
    super(persistencia);
  }

  /**
   * Retrona las aulas de un organizacion donde participa la persona (idPersona)
   * @param organizacion
   * @param idPersona
   * @return
   */
 public Vector getAulasOrganizacionUsuario(Long idOrganizacion,Long idPersona, boolean historial) throws Exception
 {
     // poner nombreUsuario y password en la consulta
     String filtro=  "participantes.contains(participante) "+
       " & participante.persona.id == "+idPersona+
       " & aulaCompuesta.id == "+idOrganizacion;

     if (!historial)
       filtro+=
       " & ( estadoAula.descripcion == \""+ESTADO_AULAS.EN_PREPARACION +"\" "+
       "    | estadoAula.descripcion == \""+ESTADO_AULAS.PRE_INSCRIPCION +"\" "+
       "    | estadoAula.descripcion == \""+ESTADO_AULAS.SELECCION +"\" "+
       "    | estadoAula.descripcion == \""+ESTADO_AULAS.ACTIVO +"\" )";
     else
       filtro +=" &  estadoAula.descripcion == \""+ESTADO_AULAS.FINALIZADO +"\"";
     //System.out.println("============>>>>>> filtro: "+filtro);
     String vars = "Participante participante";
     Vector cursos = persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Curso","nombre",filtro,vars);

     return cursos;
 }

 public Vector getAulasFavoritas(Long idPersona, boolean historial) throws Exception{
	  Vector aulasFavoritas = new Vector();
	  String filtroComun=
		  "persona.id == "+idPersona;
	  String filtro = "";
	  // Armo filtro para obtener los cursos
	  if (!historial)
		  filtro = filtroComun+
		  // necesito cartearlo a las subclases concretas del aula compuesta
		  " & ( "+
		  "      ((Curso)aula).estadoAula.descripcion == \""+ESTADO_AULAS.EN_PREPARACION +"\" "+
		  "    | ((Curso)aula).estadoAula.descripcion == \""+ESTADO_AULAS.PRE_INSCRIPCION +"\" "+
		  "    | ((Curso)aula).estadoAula.descripcion == \""+ESTADO_AULAS.SELECCION +"\" "+
		  "    | ((Curso)aula).estadoAula.descripcion == \""+ESTADO_AULAS.ACTIVO +"\" "+
		  " )";
	  else
		  filtro = filtroComun + " & ( ((Curso)aula).estadoAula.descripcion == \""+ESTADO_AULAS.FINALIZADO +"\" "+
		  " )";
	  Vector cursos = persistencia.getObjectosPorClaseYFiltro
	  		("persistencia.dominio.Favorito",filtro);
	  for (Iterator iter = cursos.iterator(); iter.hasNext();) {
		Favorito favorito = (Favorito) iter.next();
		aulasFavoritas.add(favorito.getAula());
	  }
	  return aulasFavoritas;
 }
 
 /**
  * Retorna las aulas que no tiene una organizacion dentro del campus, salvo que sea el campus
  * @return
  */
  public Vector getAulasSinOrganizacionUsuario(String nombreClase,Long idPersona,String tipoAula, boolean historial)
      throws Exception
  {

      // poner nombreUsuario y password en la consulta
      String filtro=
          "participantes.contains(participante) "+
          " & participante.persona.id == "+idPersona+
          " & tipoAula.nombre == \""+tipoAula+"\""+
          " & ( aulaCompuesta == null "+
          "    | aulaCompuesta.tipoAula.nombre == \""+TIPO_AULAS.CAMPUS+"\" )";
       if (!historial)
         filtro += " & (estadoAula.descripcion == \""+ESTADO_AULAS.EN_PREPARACION +"\""+
          "    | estadoAula.descripcion == \""+ESTADO_AULAS.PRE_INSCRIPCION +"\" "+
          "    | estadoAula.descripcion == \""+ESTADO_AULAS.SELECCION +"\" "+
          "    | estadoAula.descripcion == \""+ESTADO_AULAS.ACTIVO +"\" )";
       else
         filtro += " & estadoAula.descripcion == \""+ESTADO_AULAS.FINALIZADO +"\"";



      String vars = "Participante participante";
      //System.out.println("Filtro cursos sin organizacion: "+filtro);
      Vector cursos = persistencia.getObjectosPorClaseYFiltro(nombreClase,"nombre",filtro,vars);
      //System.out.println("cursos sin organizacion: "+cursos);

      return cursos;
  }

  public Vector getAulasSinOrganizacionUsuarioConInscripcionOnLine(String nombreClase,Long idPersona,String tipoAula, boolean historial)
  throws Exception
{

  // poner nombreUsuario y password en la consulta
  String filtro=
      "participantes.contains(participante) "+
      " & participante.persona.id == "+idPersona+
      " & tipoAula.nombre == \""+tipoAula+"\""+
      " & ( aulaCompuesta == null "+
      "    | aulaCompuesta.tipoAula.nombre == \""+TIPO_AULAS.CAMPUS+"\" )";
   if (!historial)
     filtro += " & (estadoAula.descripcion == \""+ESTADO_AULAS.EN_PREPARACION +"\""+
      "    | estadoAula.descripcion == \""+ESTADO_AULAS.PRE_INSCRIPCION +"\" "+
      "    | estadoAula.descripcion == \""+ESTADO_AULAS.SELECCION +"\" "+
      "    | estadoAula.descripcion == \""+ESTADO_AULAS.ACTIVO +"\" )";
   else
     filtro += " & estadoAula.descripcion == \""+ESTADO_AULAS.FINALIZADO +"\"";



  String vars = "Participante participante";
  //System.out.println("Filtro cursos sin organizacion: "+filtro);
  Vector cursos = persistencia.getObjectosPorClaseYFiltro(nombreClase,"nombre",filtro,vars);
  //System.out.println("cursos sin organizacion: "+cursos);

  return cursos;
}
  
  public Vector getAulasSinOrganizacion(String nombreClase,String tipoAula) throws Exception {
  String filtro=
      "tipoAula.nombre == \""+tipoAula+"\""+
      " & ( aulaCompuesta == null "+
      "    | aulaCompuesta.tipoAula.nombre == \""+TIPO_AULAS.CAMPUS+"\" )";
  filtro += " & (estadoAula.descripcion == \""+ESTADO_AULAS.EN_PREPARACION +"\""+
      "    | estadoAula.descripcion == \""+ESTADO_AULAS.PRE_INSCRIPCION +"\" "+
      "    | estadoAula.descripcion == \""+ESTADO_AULAS.SELECCION +"\" "+
      "    | estadoAula.descripcion == \""+ESTADO_AULAS.ACTIVO +"\" )";
  Vector cursos = persistencia.getObjectosPorClaseYFiltro(nombreClase,"nombre",filtro);
  return cursos;
}

  public Vector getAulasUsuario(String claseAula, Long idPersona, String tipoAula) throws Exception
  {
      String filtro=
          "participantes.contains(participante) "+
          " & participante.persona.id == "+idPersona+
          " & tipoAula.nombre == \""+tipoAula+"\""+
          " & ( estadoAula.descripcion == \""+ESTADO_AULAS.EN_PREPARACION +"\" "+
          "    | estadoAula.descripcion == \""+ESTADO_AULAS.PRE_INSCRIPCION +"\" "+
          "    | estadoAula.descripcion == \""+ESTADO_AULAS.SELECCION +"\" "+
          "    | estadoAula.descripcion == \""+ESTADO_AULAS.ACTIVO +"\" )";

      String vars = "Participante participante";
      Vector aulas = persistencia.getObjectosPorClaseYFiltro
              (claseAula,"nombre",filtro,vars);

      return aulas;
  }

  public Vector getOrganizacionesTipo(String tipoAula) throws Exception
  {
      String filtro=
          " tipoAula.nombre == \""+tipoAula+"\""+
          " & ( estadoAula.descripcion == \""+ESTADO_AULAS.EN_PREPARACION +"\" "+
          "    | estadoAula.descripcion == \""+ESTADO_AULAS.PRE_INSCRIPCION +"\" "+
          "    | estadoAula.descripcion == \""+ESTADO_AULAS.SELECCION +"\" "+
          "    | estadoAula.descripcion == \""+ESTADO_AULAS.ACTIVO +"\" )";

      Vector aulas = persistencia.getObjectosPorClaseYFiltro
              ("persistencia.dominio.Organizacion","nombre",filtro);

      return aulas;
  }

  public Vector getOrganizacionesUsuario(Long idPersona) throws Exception
  {
	  String filtro=
          "participantes.contains(participante) "+
          " & participante.persona.id == "+idPersona+
          " & ( estadoAula.descripcion == \""+ESTADO_AULAS.EN_PREPARACION +"\" "+
          "    | estadoAula.descripcion == \""+ESTADO_AULAS.PRE_INSCRIPCION +"\" "+
          "    | estadoAula.descripcion == \""+ESTADO_AULAS.SELECCION +"\" "+
          "    | estadoAula.descripcion == \""+ESTADO_AULAS.ACTIVO +"\" )";

      String vars = "Participante participante";
      Vector organizaciones = persistencia.getObjectosPorClaseYFiltro
              ("persistencia.dominio.Organizacion","nombre",filtro,vars);

      return organizaciones;
  }

  public Vector getAulasOrganizacionEnEstado(Long idOrganizacion, String estado) throws Exception{
      String filtro=  "aulaCompuesta.id == "+idOrganizacion;
      filtro +=" &  estadoAula.descripcion == \""+estado+"\"";
      Vector cursos = persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Curso","nombre",filtro);
      return cursos;
  }

  public Vector getAulasOrganizacion(Long idOrganizacion) throws Exception{
      String filtro=  "aulaCompuesta.id == "+idOrganizacion +
      					" & ( estadoAula.descripcion == \""+ESTADO_AULAS.EN_PREPARACION +"\" "+
      					"    | estadoAula.descripcion == \""+ESTADO_AULAS.PRE_INSCRIPCION +"\" "+
      					"    | estadoAula.descripcion == \""+ESTADO_AULAS.SELECCION +"\" "+
      					"    | estadoAula.descripcion == \""+ESTADO_AULAS.ACTIVO +"\" )";
      Vector cursos = persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Curso","nombre",filtro);
      return cursos;
  }
  
  public Organizacion getOrganizacion(Long idOrganizacion) throws Exception{
	    return (Organizacion)persistencia.getObjectoPorId("persistencia.dominio.Organizacion",idOrganizacion);
  }
}